#include <stdio.h>
#include <stdlib.h>

typedef struct _subject {
    char sno[20];     // 学号
    char name[20];     // 姓名
    float chinese;     // 语文成绩
    float math;        // 数学成绩
    float english;     // 英语成绩
} subject;

#define STUDENT_COUNT 5

int main() {
    FILE *file;
    subject students[STUDENT_COUNT];
    subject read_back[STUDENT_COUNT];
    int i, count = 0;

    // 从键盘输入学生信息
    printf("请输入%d个学生的成绩信息（学号 姓名 语文 数学 英语）：", STUDENT_COUNT);
    for (i = 0; i < STUDENT_COUNT; i++) {
        if (fscanf(stdin, "%19s %19s %f %f %f", 
                   students[i].sno, students[i].name, 
                   &students[i].chinese, &students[i].math, 
                   &students[i].english) != 5) {
            printf("输入格式错误，请重新输入第%d条记录：", i+1);
            i--;  // 重新输入当前记录
            continue;
        }
    }

    // 写入二进制文件
    file = fopen("./data", "wb");
    if (!file) {
        perror("无法打开文件");
        return 1;
    }
    fwrite(students, sizeof(subject), STUDENT_COUNT, file);
    fclose(file);

    // 读取二进制文件
    file = fopen("./data", "rb");
    if (!file) {
        perror("无法打开文件");
        return 1;
    }
    count = fread(read_back, sizeof(subject), STUDENT_COUNT, file);
    fclose(file);

    // 输出第1、3、5条记录
    printf("读回的记录如下：");
    for (i = 0; i < STUDENT_COUNT; i += 2) {  // 输出第1、3、5条（索引0、2、4）
        printf("记录%d: 学号=%s, 姓名=%s, 语文=%.1f, 数学=%.1f, 英语=%.1f\n",
               i/2 + 1, 
               read_back[i].sno, read_back[i].name,
               read_back[i].chinese, read_back[i].math,
               read_back[i].english);
    }

    return 0;
}